let _http = require("../utils/http.js");
let _app;
//临时存储验证码的变量
let _codeObj = {};

/**
 * 检测app是否幼稚
 */
function checkApp() {
  if (!_app) {
    _app = getApp();
  }
}

/**
 * 普通登陆（使用用户名、密码）
 */
function loginByPwd(name, pwd) {
  checkApp();
  _http.request({
    url: _app.host + 'account/login',
    data:
    {
      account: name,
      password: pwd
    },
    method: 'POST',
    success: function (res) {
      if (res.data.code == "100000") {
        _app.user.updateInfo(res.data.data);
        _app.sendG(_app.g.const.USER_LOGIN_SUCCESS, res.data.data);
      } else {
        _app.sendG(_app.g.const.USER_LOGIN_FAIL, res.data);
      }
    },
    fail: function (res) {
      _app.sendG(_app.g.const.USER_LOGIN_FAIL, res.data);
    }
  })
}

/**
 * 获取手机验证码
 */
function getPhoneCode(num, imageCode) {
  checkApp();
  _http.request({
    url: _app.host + 'smscode/send',
    data:
    {
      mobile: num,
      captchaId: _codeObj.id,
      captchaValue: imageCode
    },
    method: 'POST',
    success: function (res) {
      if (res.data.code == "100000") {
        _app.sendG(_app.g.const.USER_CHECK_CODE_SUCCESS, res.data.data);
      } else {
        _app.sendG(_app.g.const.USER_CHECK_CODE_FAIL, res.data);
      }
    },
    fail: function (res) {
      _app.sendG(_app.g.const.USER_CHECK_CODE_FAIL, res.data);
    }
  })
}

/**
 * 手机注册
 */
function phoneRegister(num, code) {
  checkApp();
  _http.request({
    url: _app.host + "account/create",
    method: "POST",
    data: {
      mobile: num,
      code: code
    },
    success: function (res) {
      if (res.data.code == "100000") {
        _app.user.updateInfo(res.data.data);
        _app.sendG(_app.g.const.USER_RIGISTER_SUCCESS, res.data.data);
      } else {
        _app.sendG(_app.g.const.USER_RIGISTER_FAIL, res.data);
      }
    },
    fail: function (res) {
      _app.sendG(_app.g.const.USER_RIGISTER_FAIL, res.data);
    }
  });
}

/**
 * 快捷登陆（使用手机验证码）
 */
function loginByCode(num, code) {
  checkApp();
  _http.request({
    url: _app.host + "account/fastlogin",
    method: "POST",
    data: {
      mobile: num,
      code: code
    },
    success: function (res) {
      if (res.data.code == "100000") {
        _app.user.updateInfo(res.data.data);
        _app.sendG(_app.g.const.USER_LOGIN_SUCCESS, res.data.data);
      } else {
        _app.sendG(_app.g.const.USER_LOGIN_FAIL, res.data);
      }
    },
    fail: function (res) {
      _app.sendG(_app.g.const.USER_LOGIN_FAIL, res.data);
    }
  });
}

/**
 * 获取图片验证码
 */
function getImageCode() {
  checkApp();
  _http.request({
    url: _app.host + "captcha/image",
    method: "GET",
    data: {},
    success: function (res) {
      if (res.data.code == "100000") {
        // {"code":100000,"msg":"success","data":{"id":"44aaf722e58d7d558550c2e658a3ba9b","base64Content":"data:image\/jpeg;base64,xxxxxxxxxxx}}
        _codeObj = res.data.data;
        _app.sendG(_app.g.const.USER_GET_CODE_SUCCESS, res.data.data);
      } else {
        _app.sendG(_app.g.const.USER_GET_CODE_fAIL, res.data);
      }
    },
    fail: function (res) {
      _app.sendG(_app.g.const.USER_GET_CODE_fAIL, res.data);
    }
  });
}

/**
 * 获取登陆用户的信息
 */
function getLoginInfo() {
  checkApp();
  _app.user.getLoginInfo(function (value) {
    if (value.code) {
      if (value.code == "100000") {
        _app.sendG(_app.g.const.USER_GET_LOGIN_INFO_SUCCESS, value);
      } else {
        _app.sendG(_app.g.const.USER_GET_LOGIN_INFO_FAIL, value);
      }
    } else {
      _app.sendG(_app.g.const.USER_GET_LOGIN_INFO_FAIL, value);
    }
  });
}

/**
 * 退出登录
 */
function logout() {
  checkApp();
  _app.user.changeUserType();
  _app.sendG(_app.g.const.USER_LOGOUT_SUCCESS);

  _http.request({
    url: _app.host + "account/logout",
    method: "GET",
    data: {},
    success: function (res) {
      _app.user.updateInfo();
      _app.log(res.data.data, "退出登录成功");
    },
    fail: function (res) {
      _app.log(res.data.data, "退出登录失败");
    }
  });
}

module.exports = {
  getImageCode: getImageCode,
  loginByPwd: loginByPwd,
  loginByCode: loginByCode,
  phoneRegister: phoneRegister,
  getLoginInfo: getLoginInfo,
  getPhoneCode: getPhoneCode,
  logout: logout
}